package com.fa4j.code.mate.service;

import com.fa4j.code.mate.model.*;
import com.fa4j.common.base.model.RemoveCmd;
import jakarta.validation.Valid;

/**
 * 代码元数据 服务接口
 *
 * @since 2025-09-14 11:40:42
 */
public interface CodeMateService {


    /**
     * 新增项目
     *
     * @param cmd 新增参数
     * @return 项目
     */
    CodeMateProject createProject(@Valid CodeMateProjectCreateCmd cmd);


    /**
     * 编辑项目
     *
     * @param cmd 新增参数
     * @return 项目
     */
    CodeMateProject modifyProject(@Valid CodeMateProjectModifyCmd cmd);


    /**
     * 新增模块
     *
     * @param cmd 新增参数
     * @return 模块
     */
    CodeMateModule createModule(@Valid CodeMateModuleCreateCmd cmd);


    /**
     * 编辑代码模块
     *
     * @param cmd 编辑参数
     * @return 模块
     */
    CodeMateModule modifyModule(@Valid CodeMateModuleModifyCmd cmd);


    /**
     * 新增模型
     *
     * @param cmd 新增参数
     * @return 模型
     */
    CodeMateModel createModel(@Valid CodeMateModelCreateCmd cmd);

    /**
     * 编辑模型
     *
     * @param cmd 编辑参数
     * @return 模型
     */
    CodeMateModel modifyModel(@Valid CodeMateModelModifyCmd cmd);


    /**
     * 新增模型方法
     *
     * @param cmd 新增参数
     * @return 模型方法
     */
    CodeMateMethod createMethod(@Valid CodeMateMethodCreateCmd cmd);

    /**
     * 编辑模型方法
     *
     * @param cmd 编辑参数
     * @return 模型方法
     */
    CodeMateMethod modifyMethod(@Valid CodeMateMethodModifyCmd cmd);


    /**
     * 新增模型方法
     *
     * @param cmd 新增参数
     * @return 模型字段
     */
    CodeMateField createField(@Valid CodeMateFieldCreateCmd cmd);

    /**
     * 编辑模型字段
     *
     * @param cmd 编辑参数
     * @return 模型字段
     */
    CodeMateField modifyField(@Valid CodeMateFieldModifyCmd cmd);


    /**
     * 删除代码元数据
     *
     * @param cmd 删除参数
     * @return 代码元数据
     */
    CodeMate remove(@Valid RemoveCmd<Integer> cmd);

}